﻿using System;
using System.Xml.Serialization;

namespace Ant.Interface.Mef.Model.Catalogs.CatalogType
{
    /// <summary>
    /// 类型目录配置。
    /// </summary>
    public sealed class TypeCatalogConfig : CatalogConfigBase
    {
        #region "Property"

        /// <summary>
        /// 要获取的类型的程序集限定名称。
        /// </summary>
        public string TypeName { get; set; }

        /// <summary>
        /// 如果为 true，则在找不到该类型时引发异常；如果为 false，则返回 null。指定 false 还会消除其他一些异常情况，但不能全部消除。请参见“异常”一节。
        /// </summary>
        public bool ThrowOnError { get; set; }

        /// <summary>
        /// 为 typeName 执行的搜索不区分大小写则为 true，为 typeName 执行的搜索区分大小写则为 false。
        /// </summary>
        public bool IgnoreCase { get; set; }

        #endregion "Property"

        #region "CatalogConfigBase Member"

        /// <summary>
        /// 目录类型。
        /// </summary>
        public override Mef.Model.Catalogs.CatalogType.CatalogType CatalogType
        {
            get { return Mef.Model.Catalogs.CatalogType.CatalogType.TypeCatalog; }
        }

        /// <summary>
        /// 组合部件目录。
        /// </summary>
        [XmlIgnore]
        public override object ComposablePart
        {
            get
            {
                var type = Type.GetType(TypeName, ThrowOnError, IgnoreCase);
                return type;
            }
        }

        #endregion "CatalogConfigBase Member"
    }
}